#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>

#define EPSILON 0.01 // 定义一个很小的范围

// 百分比 计算  跳出条件
void test(int x , int y , float time_length)
{
    float flag = 0;                             // 当前进度时间
    float total_length = 20;                    // 进度条总长度
    float mean = time_length / total_length;    // 平均数
    float temp = 0;                             // 和平均数对比
    float percent = 0;                          // 用于显示百分比
    int num = 0;                                // 控制进度条符号的个数

    while (1)
    {
        
        if (fabs(temp - mean) < EPSILON) // 使用fabs计算浮点数差值的绝对值
        {
            num++;
            temp = 0;
        }
        for (size_t i = 0; i < y; i++)
        {
            putchar('\n');
        }
        for (size_t i = 0; i < x; i++)
        {
            putchar(' ');
        }
        
        putchar('[');
        for (size_t i = 0; i < num; i++)
        {
            printf(">");
        }
        for (size_t i = 0; i < total_length - num; i++)
        {
            printf(" ");
        }
        putchar(']');
        percent = ((time_length / 100) * flag) * 100;
        printf("%.2f%%\n" , percent);
        temp += 0.01;
        flag += 0.01;
        if (fabs((flag - 0.01) - time_length) < EPSILON)
        {
            break;
        }
        
        // 监控数据

        // printf("\n%.2f", flag);
        // printf("\n%.2f", time_length);
        // printf("\n%.2f", temp);
        // printf("\n%.2f", mean);
        // printf("\n%d", num);

        fflush(stdout);
        usleep(10000);
        system("clear");
    }
    system("clear");
}

int main(int argc, char const *argv[])
{

    test(20 , 5 , 10); // 调用测试函数
    system("clear");
    return 0; // 返回0，表示程序正常结束
}
